{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5f4b7e83-aad1-4463-96df-38f5d9b2c324",
   "metadata": {},
   "source": [
    "Chapter 18\n",
    "# 将邻接矩阵转换为无向图\n",
    "Book_6《数据有道》 | 鸢尾花书：从加减乘除到机器学习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8bfd4f39-05ce-4793-9dd9-30b50c325683",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import networkx as nx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "23325c0e-35bd-4ad7-b496-e3a5a0da7cc1",
   "metadata": {},
   "outputs": [],
   "source": [
    "adjacency_matrix = np.array([[0, 1, 1, 0], \n",
    "                             [1, 0, 1, 1], \n",
    "                             [1, 1, 0, 1], \n",
    "                             [0, 1, 1, 0]])\n",
    "# 定义邻接矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b08b41dd-c667-482b-8c8d-3fe025e43a6a",
   "metadata": {},
   "outputs": [],
   "source": [
    "G = nx.Graph(adjacency_matrix, nodetype=int)\n",
    "# 用邻接矩阵创建无向图\n",
    "\n",
    "node_labels = {i: chr(ord('a') + i) for i in range(len(G.nodes))} \n",
    "# 创建字典，可视化时用作节点标签\n",
    "# {0: 'a', 1: 'b', 2: 'c', 3: 'd'}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8e52d9f1-1142-47dd-a4b3-b797141c3141",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0: 'a', 1: 'b', 2: 'c', 3: 'd'}"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "node_labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d7c807b4-de0f-45f4-80a7-9c6fc37d3364",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化\n",
    "plt.figure(figsize = (6,6))\n",
    "nx.draw_networkx(G, with_labels=True, labels=node_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "838e69d8-a1f1-4847-9247-b78703bd9ffe",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
